package eMdP.estats;

import java.net.URL;

import com.jmex.bui.BButton;
import com.jmex.bui.BComponent;
import com.jmex.bui.BContainer;
import com.jmex.bui.BImage;
import com.jmex.bui.BLabel;
import com.jmex.bui.BToggleButton;
import com.jmex.bui.background.ImageBackground;
import com.jmex.bui.enumeratedConstants.ImageBackgroundMode;
import com.jmex.bui.event.ActionEvent;
import com.jmex.bui.event.ActionListener;
import com.jmex.bui.util.Point;

import eMdP.gestors.GestorConstants;
import eMdP.gestors.GestorPantalla;

public class MenuIniciarPartidaMultiJugador extends GbuiGameState {
	
	private BButton boto;
	private BLabel text;
	private BContainer contenidor;
	private BToggleButton toggle;
	private int idPantalla;
	private int[] idPlayer;
	private int mode;
	
	public MenuIniciarPartidaMultiJugador (String name)
	{
		super(name);
		System.out.println("Entro a menú d'iniciar partida multijugador");

    	window.setSize((int)(display.getWidth()),(int)(display.getHeight()));
    	
 		int posicioY = window.getHeight()-GestorConstants.ALT_BOTO;
    	
    	text = new BLabel("Inicia partida multijugador");
    	text.setPreferredSize(window.getWidth(), GestorConstants.ALT_BOTO);
    	window.add(text, new Point(0, posicioY));
    	
		posicioY = posicioY-GestorConstants.PIXELS_IMATGE_PANTALLA-GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI;
    	
		posicioY = creaMenuPantalles(posicioY);
    	
    	posicioY = crearMenuPersonatges(posicioY);
    	
    	posicioY = crearMenuModalitat(posicioY);
    	
    	int posicioX = window.getWidth()/2-210;
 		// Cancel button
 		boto = new BButton("Torna");
 		boto.setPreferredSize(GestorConstants.BOTO_200_PX, GestorConstants.ALT_BOTO);
 		boto.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				GestorPantalla.canvia(5,0);
			}
        });
        window.add(boto, new Point(posicioX, 20));
        
        posicioX = window.getWidth()/2+GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI;
        
        boto = new BButton("Juga!");
        boto.setPreferredSize(GestorConstants.BOTO_200_PX, GestorConstants.ALT_BOTO);
 		boto.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				String[] noms = getNomsPersonatges(true);
				for(int i=0;i<idPlayer.length;i++)
					if(idPlayer[i] == noms.length-1)
						idPlayer[i] = -1;
				if(idPlayer[0] != -1 && idPlayer[1] != -1)
				{
					System.out.println("Let's play toghether!!!");
					System.out.println("Mode: "+mode+", idPantalla: "+idPantalla+", idPlayer1: "+idPlayer[0]+
							", idPlayer2: "+idPlayer[1]+", idPlayer3: "+idPlayer[2]+", idPlayer4: "+idPlayer[3]);
					GestorPantalla.iniciaPartida(idPlayer, idPantalla, mode);
				}
				else
					System.out.println("No pots jugar sense els dos primers jugadors tontaco!!!");
				
			}
        });
        window.add(boto, new Point(posicioX, 20));
        
	}
	
	private int creaMenuPantalles(int posicioY)
	{
		
    	String[] noms = getNomsPantalles();
    	BImage[] imatges = getImatgesPantalles(noms);
    	
    	idPantalla = 0;
    	
    	contenidor = new BContainer("Imatge pantalla");
		contenidor.setBackground(BComponent.DEFAULT, new ImageBackground(ImageBackgroundMode.SCALE_XY, imatges[idPantalla]));
		contenidor.setPreferredSize(GestorConstants.PIXELS_IMATGE_PANTALLA, GestorConstants.PIXELS_IMATGE_PANTALLA);
		contenidor.setHoverEnabled(false);
		window.add(contenidor, new Point(window.getWidth()/2-GestorConstants.PIXELS_IMATGE_PANTALLA/2,posicioY));
		
		posicioY = posicioY - GestorConstants.ALT_BOTO;
		
		text = new BLabel(noms[0]);
		text.setPreferredSize(GestorConstants.PIXELS_IMATGE_PANTALLA, GestorConstants.ALT_BOTO);
    	window.add(text, new Point(window.getWidth()/2-GestorConstants.PIXELS_IMATGE_PANTALLA/2, posicioY));
    	
    	posaBotonsAbansDespresPantalles(posicioY+GestorConstants.ALT_BOTO);
    	
    	return posicioY-GestorConstants.PIXELS_IMATGE_PJ_PETITA-GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI;
	}
	
	private int crearMenuPersonatges(int posicioY)
	{
    	String[] noms = getNomsPersonatges(true);
    	BImage[] imatges = getImatgesPersonatges(noms, true);
    	idPlayer = new int[4];
    	for(int i=0;i<4;i++)
    		idPlayer[i] = 0;
    	
    	int posicioYtmp;
    	
    	for(int i=0;i<4;i++)
    	{
    		int posicioX;
    		
    		if(i == 1 || i == 3)
    			posicioX = (window.getWidth()/4)*3;
    		else
    			posicioX = window.getWidth()/4;
    		
    		if(i == 2)
    			posicioY = posicioY - GestorConstants.PIXELS_IMATGE_PJ_PETITA - GestorConstants.ALT_BOTO;
    		
    		text = new BLabel("Jugador "+(i+1));
    		text.setPreferredSize(GestorConstants.BOTO_200_PX,GestorConstants.ALT_BOTO);
    		window.add(text, new Point(posicioX-GestorConstants.BOTO_200_PX, posicioY));
    		
    		contenidor = new BContainer("Imatge personatge "+(i+1));
        	contenidor.setPreferredSize(GestorConstants.PIXELS_IMATGE_PJ_PETITA, GestorConstants.PIXELS_IMATGE_PJ_PETITA);
    		contenidor.setBackground(BComponent.DEFAULT, new ImageBackground(ImageBackgroundMode.SCALE_XY, imatges[idPlayer[i]]));
    		
    		contenidor.setHoverEnabled(false);
    		window.add(contenidor, new Point(posicioX-32,posicioY-32));
    		
    		posicioYtmp = posicioY - GestorConstants.ALT_BOTO;
    		
    		text = new BLabel(noms[idPlayer[i]]);
    		text.setPreferredSize(GestorConstants.PIXELS_IMATGE_PANTALLA, GestorConstants.ALT_BOTO);
        	window.add(text, new Point(posicioX-GestorConstants.PIXELS_IMATGE_PJ_PETITA/2, posicioYtmp));
        	
        	
    	}
    	
    	posaBotonsAbansDespresPJs(posicioY);
    	
    	return posicioY-GestorConstants.ALT_BOTO-GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI;
	}
	
	private int crearMenuModalitat(int posicioY)
	{
		text = new BLabel("Escull la modalitat de joc");
    	text.setPreferredSize(window.getWidth(), GestorConstants.ALT_BOTO);
    	window.add(text, new Point(0, posicioY));
 		
    	posicioY = posicioY - GestorConstants.ALT_BOTO;
    	
    	mode = GestorConstants.MODE_TEMPS; // Mode = 1 vol dir paquets
    	toggle = new BToggleButton("Per temps");
    	toggle.setPreferredSize(150,GestorConstants.ALT_BOTO);
    	toggle.setSelected(true);
    	toggle.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				boolean selected = ((BToggleButton)window.getComponent(26)).getState() == 3;
				((BToggleButton)window.getComponent(27)).setSelected(selected);
				if(selected)
					mode = GestorConstants.MODE_PAQUETS;
				else
					mode = GestorConstants.MODE_TEMPS;
			}
        });
    	window.add(toggle, new Point(window.getWidth()/2-160,posicioY));
    	toggle = new BToggleButton("Per paquets");
    	toggle.setPreferredSize(150,GestorConstants.ALT_BOTO);
    	toggle.setSelected(false);
    	toggle.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				boolean selected = ((BToggleButton)window.getComponent(27)).getState() == 3;
				((BToggleButton)window.getComponent(26)).setSelected(selected);
				if(selected)
					mode = GestorConstants.MODE_TEMPS;
				else
					mode = GestorConstants.MODE_PAQUETS;
			}
        });
    	window.add(toggle, new Point(window.getWidth()/2+10,posicioY));
    	
    	return posicioY;
	}
	
	private void posaBotonsAbansDespresPantalles(int posicioY)
	{
		BButton botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("anterior");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				String[] nomPantalles = getNomsPantalles();
				BImage[] imatges = getImatgesPantalles(nomPantalles);
				System.out.println("Pantalla anterior");
				idPantalla--;
				if(idPantalla<0)
					idPantalla = 2;
				window.getComponent(1).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, imatges[idPantalla]));
				((BLabel)window.getComponent(2)).setText(nomPantalles[idPantalla]);
				
			}
		});
		
		window.add(botoTmp, new Point(window.getWidth()/2-128, posicioY+42));
		
		botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("seguent");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				System.out.println("Pantalla seguent");
				String[] nomPantalles = getNomsPantalles();
				BImage[] imatges = getImatgesPantalles(nomPantalles);
				idPantalla++;
				idPantalla=idPantalla%3;
				window.getComponent(1).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, imatges[idPantalla]));
				((BLabel)window.getComponent(2)).setText(nomPantalles[idPantalla]);
			}
        });
		window.add(botoTmp, new Point(window.getWidth()/2+84, posicioY+42));
	}
	
	private void posaBotonsAbansDespresPJs(int posicioY)
	{
		posarBotonsAbansDespresPJ1(posicioY);
		posarBotonsAbansDespresPJ2(posicioY);
		posarBotonsAbansDespresPJ3(posicioY);
		posarBotonsAbansDespresPJ4(posicioY);
		
	}
	
	private void posarBotonsAbansDespresPJ1(int posicioY)
	{
		BButton botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("anterior");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				System.out.println("Pantalla anterior");
				idPlayer[0]--;
				if(idPlayer[0]<0)
					idPlayer[0] = personatges.length-1;
				window.getComponent(6).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[0]]));
				((BLabel)window.getComponent(7)).setText(nomPersonatges[idPlayer[0]]);
				
			}
		});
		window.add(botoTmp, new Point(window.getWidth()/4-GestorConstants.PIXELS_IMATGE_PJ_PETITA/2 - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.PIXELS_IMATGE_PJ_PETITA + GestorConstants.ALT_BOTO + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
		
		botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("seguent");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				idPlayer[0]++;
				idPlayer[0]=idPlayer[0]%personatges.length;
				window.getComponent(6).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[0]]));
				((BLabel)window.getComponent(7)).setText(nomPersonatges[idPlayer[0]]);
			}
        });
		window.add(botoTmp, new Point(window.getWidth()/4 + GestorConstants.PIXELS_IMATGE_PJ_PETITA - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.PIXELS_IMATGE_PJ_PETITA + GestorConstants.ALT_BOTO + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
	}
	
	private void posarBotonsAbansDespresPJ2(int posicioY)
	{
		BButton botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("anterior");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				System.out.println("Pantalla anterior");
				idPlayer[1]--;
				if(idPlayer[1]<0)
					idPlayer[1] = personatges.length-1;
				window.getComponent(9).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[1]]));
				((BLabel)window.getComponent(10)).setText(nomPersonatges[idPlayer[1]]);
			}
		});
		window.add(botoTmp, new Point(window.getWidth()/4*3-GestorConstants.PIXELS_IMATGE_PJ_PETITA/2 - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.PIXELS_IMATGE_PJ_PETITA + GestorConstants.ALT_BOTO + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
		
		botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("seguent");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				idPlayer[1]++;
				idPlayer[1]=idPlayer[1]%personatges.length;
				window.getComponent(9).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[1]]));
				((BLabel)window.getComponent(10)).setText(nomPersonatges[idPlayer[1]]);
			}
        });
		window.add(botoTmp, new Point(window.getWidth()/4*3 + GestorConstants.PIXELS_IMATGE_PJ_PETITA - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.PIXELS_IMATGE_PJ_PETITA + GestorConstants.ALT_BOTO + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
	}
	
	private void posarBotonsAbansDespresPJ3(int posicioY)
	{
		BButton botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("anterior");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				System.out.println("Pantalla anterior");
				idPlayer[2]--;
				if(idPlayer[2]<0)
					idPlayer[2] = personatges.length-1;
				window.getComponent(12).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[2]]));
				((BLabel)window.getComponent(13)).setText(nomPersonatges[idPlayer[2]]);
				
			}
		});
		window.add(botoTmp, new Point(window.getWidth()/4-GestorConstants.PIXELS_IMATGE_PJ_PETITA/2 - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
		
		botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("seguent");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				idPlayer[2]++;
				idPlayer[2]=idPlayer[2]%personatges.length;
				window.getComponent(12).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[2]]));
				((BLabel)window.getComponent(13)).setText(nomPersonatges[idPlayer[2]]);
			}
        });
		window.add(botoTmp, new Point(window.getWidth()/4 + GestorConstants.PIXELS_IMATGE_PJ_PETITA - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
	}
	
	private void posarBotonsAbansDespresPJ4(int posicioY)
	{
		BButton botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("anterior");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				System.out.println("Pantalla anterior");
				idPlayer[3]--;
				if(idPlayer[3]<0)
					idPlayer[3] = personatges.length-1;
				window.getComponent(15).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.SCALE_XY, personatges[idPlayer[3]]));
				((BLabel)window.getComponent(16)).setText(nomPersonatges[idPlayer[3]]);
				
			}
		});
		window.add(botoTmp, new Point(window.getWidth()/4*3-GestorConstants.PIXELS_IMATGE_PJ_PETITA/2 - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
		
		botoTmp = new BButton("");
		botoTmp.setPreferredSize(44, 44);
		botoTmp.setStyleClass("seguent");
		botoTmp.addListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent event) {
				
				String[] nomPersonatges = getNomsPersonatges(true);
				BImage[] personatges = getImatgesPersonatges(nomPersonatges, true);
				idPlayer[3]++;
				idPlayer[3]=idPlayer[3]%personatges.length;
				window.getComponent(15).setBackground(BComponent.DEFAULT, 
						new ImageBackground(ImageBackgroundMode.CENTER_XY, personatges[idPlayer[3]]));
				((BLabel)window.getComponent(16)).setText(nomPersonatges[idPlayer[3]]);
			}
        });
		window.add(botoTmp, new Point(window.getWidth()/4*3 + GestorConstants.PIXELS_IMATGE_PJ_PETITA - GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI, 
				posicioY + GestorConstants.ESPAI_ENTRE_ELEMENTS_GBUI));
	}

}
